
local CommonOHOH=_G.CommonOHOH

local M = CommonOHOH.class.new(script, CommonOHOH.files.BaseComponent());

function M.new(self,...)
	return M(self,...);
end;

function M.ctor(self, parent)
	M.super.ctor(self, parent);

	-- 初始化数据
	self.MonsterWaveList=self.parent.MonsterWaveList --刷怪列表
	self.AllWaveCount=#self.MonsterWaveList --波次数量
	self.Dt=self.parent.MonsterWaveDt --刷新怪的时间间隔
    self.Battle=self.parent.Battle

	self.WaveIndex=1 --当前波次索引

    self.MonsterCount=0
    for _,v in pairs(self.MonsterWaveList) do
        self.MonsterCount= self.MonsterCount+#v
    end
end;

function M.dtor(self)
    -- print("---BB---正在销毁所有怪物-----",self.parent.Id)
	self:RemoveAllConnect()
	-- for guid,m in pairs(self.MonsterObjList) do
	-- 	m:dtor()
	-- end
    -- if self.Boss then
    --     self.Boss:dtor()
    --     self.Boss=nil
    -- end
	M.super.dtor(self);
end


function M.GetMonsterCount(self)
    return self.MonsterCount
end

function M.RemoveAllConnect(self)
    if self.CheckClearCon then
        self.CheckClearCon:Disconnect()
        self.CheckClearCon=nil
    end

    if self.WaitCreateMonsterConnect then
        self.WaitCreateMonsterConnect:Disconnect()
        self.WaitCreateMonsterConnect=nil
    end


end

-- 胜利,通关
function M.Victory(self)
    self:RemoveAllConnect()
    self.parent:Pass()
end


local function PlayEffect (id,pos)
    local e=_G.POOL:GetObj(id)
    require(e.PlayCtrl).Play(pos,function()
        _G.POOL:PushObj(id,e)
    end)
  end


-- 开始生成勿怪
function M.Action(self)

    -- print("------第x关 开始刷怪-->",self.parent:GetId())
    --最后一波的，第一个是Boss
    local attCtrl=self.Battle:GetPrivateComponent("AttCtrl")
    PlayEffect("Effect.BossBron",attCtrl:GetBossEffectPos())

    self:AddProcess(function()
        self:Wait(1)
        self.Boss=CommonOHOH.load.MonsterBoss().new(self.parent:GetId(),self.MonsterWaveList[self.AllWaveCount][1],self.Battle)
        -- print("------第x关 Boss创建成功-->",self.parent:GetId())
        -- 刷一波怪
        task.wait()
        self:CreateOneWave()
        -- print("--------刷小怪--------------")

        task.wait()

        self:CheckClearMonster()
        -- print("-------监听清零--------------")

    end)

end

-- 监听怪物是否已经全部被消灭
function M.CheckClearMonster(self)
    local f=self.Battle:GetPrivateComponent("AttCtrl"):FindMonsterFolder()
    self.CheckClearCon=f.ChildRemoved:Connect(function(child)
            task.wait()

            local count= #f:GetChildren()
            if count==1 then --只剩下boss了
                self:CreateOneWave()
            elseif count==0 then --清空完毕，胜利
            -- print("-------清零了--------------")

                self:Victory()
            end
        end)
end

-- 等待一个间隔时间创建下一波怪
function M.WaitCreateNextWave(self,waveId)
    if self.WaitCreateMonsterConnect then
        self.WaitCreateMonsterConnect:Disconnect()
        self.WaitCreateMonsterConnect=nil
    end
    -- 等待一个间隔时间创建下一波怪
    self.WaitCreateMonsterConnect= self:AddProcess(function()
        self:Wait(self.Dt[waveId])
        self:CreateOneWave()
    end)
end



-- 创建一波怪
function M.CreateOneWave(self)
    if  self.WaveIndex<self.AllWaveCount then --创建一波小怪
		self.Boss:HatchMonster(self.MonsterWaveList[self.WaveIndex]) --初始化一波怪
		self:WaitCreateNextWave(self.WaveIndex) --等待一段时间，创建下一波怪
        self.WaveIndex=self.WaveIndex+1
    -- 等待创建下个波次
    elseif  self.WaveIndex==self.AllWaveCount then --最后一波激活boss
		self.Boss:Action()
		self.WaveIndex=self.WaveIndex+1
    -- else --所有怪物波数已经被清理，取得胜利
    --     self:Victory()
    end
   
end

return M